﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.IO;
using System.Xml;
using System.Data;
using System.Text;

/// <summary>
///DsXmlConvert 的摘要说明
/// </summary>
public class DsXmlConvert
{
	public DsXmlConvert()
	{
		//
		//TODO: 在此处添加构造函数逻辑
		//
	}

    //将xml对象内容字符串转换为DataSet
    /// <summary>
    /// 
    /// </summary>
    /// <param name="xmlData"></param>
    /// <returns></returns>
    public static DataSet ConvertXMLToDataSet(string xmlData)
    {
        StringReader stream = null;
        XmlTextReader reader = null;
        try
        {
            DataSet xmlDS = new DataSet();
            stream = new StringReader(xmlData);
            //从stream装载到XmlTextReader
            reader = new XmlTextReader(stream);
            xmlDS.ReadXml(reader);
            return xmlDS;
        }
        catch (System.Exception ex)
        {
            throw ex;
        }
        finally
        {
            if (reader != null) reader.Close();
        }
    }

    //将xml文件转换为DataSet
    /// <summary>
    /// 将xml文件转换为DataSet
    /// </summary>
    /// <param name="xmlFile"></param>
    /// <returns></returns>
    public static DataSet ConvertXMLFileToDataSet(string xmlFile)
    {
        StringReader stream = null;
        XmlTextReader reader = null;
        try
        {
            XmlDocument xmld = new XmlDocument();
            xmld.Load(xmlFile);

            DataSet xmlDS = new DataSet();
            stream = new StringReader(xmld.InnerXml);
            //从stream装载到XmlTextReader
            reader = new XmlTextReader(stream);
            xmlDS.ReadXml(reader);
            //xmlDS.ReadXml(xmlFile);
            return xmlDS;
        }
        catch (System.Exception ex)
        {
            throw ex;
        }
        finally
        {
            if (reader != null) reader.Close();
        }
    }

    //将DataSet转换为xml对象字符串
    /// <summary>
    /// 将DataSet转换为xml对象字符串
    /// </summary>
    /// <param name="xmlDS"></param>
    /// <returns></returns>
    public static string ConvertDataSetToXML(DataSet xmlDS)
    {
        MemoryStream stream = null;
        XmlTextWriter writer = null;

        try
        {
            stream = new MemoryStream();
            //从stream装载到XmlTextReader
            writer = new XmlTextWriter(stream, Encoding.Unicode);

            //用WriteXml方法写入文件.
            xmlDS.WriteXml(writer);
            int count = (int)stream.Length;
            byte[] arr = new byte[count];
            stream.Seek(0, SeekOrigin.Begin);
            stream.Read(arr, 0, count);

            UnicodeEncoding utf = new UnicodeEncoding();
            return utf.GetString(arr).Trim();
        }
        catch (System.Exception ex)
        {
            throw ex;
        }
        finally
        {
            if (writer != null) writer.Close();
        }
    }

    public static string ConvertDataSetToXMLSchema(DataSet xmlDS)
    {
        MemoryStream stream = null;
        XmlTextWriter writer = null;

        try
        {
            stream = new MemoryStream();
            //从stream装载到XmlTextReader
            writer = new XmlTextWriter(stream, Encoding.Unicode);

            //用WriteXml方法写入文件.
            xmlDS.WriteXmlSchema(writer);
            int count = (int)stream.Length;
            byte[] arr = new byte[count];
            stream.Seek(0, SeekOrigin.Begin);
            stream.Read(arr, 0, count);

            UnicodeEncoding utf = new UnicodeEncoding();
            return utf.GetString(arr).Trim();
        }
        catch (System.Exception ex)
        {
            throw ex;
        }
        finally
        {
            if (writer != null) writer.Close();
        }
    }

    //将DataSet转换为xml文件
    /// <summary>
    /// 将DataSet转换为xml文件
    /// </summary>
    /// <param name="xmlDS"></param>
    /// <param name="xmlFile"></param>
    public static void ConvertDataSetToXMLFile(DataSet xmlDS, string xmlFile)
    {
        MemoryStream stream = null;
        XmlTextWriter writer = null;

        try
        {
            stream = new MemoryStream();
            //从stream装载到XmlTextReader
            writer = new XmlTextWriter(stream, Encoding.Unicode);

            //用WriteXml方法写入文件.
            xmlDS.WriteXml(writer);
            int count = (int)stream.Length;
            byte[] arr = new byte[count];
            stream.Seek(0, SeekOrigin.Begin);
            stream.Read(arr, 0, count);

            //返回Unicode编码的文本
            UnicodeEncoding utf = new UnicodeEncoding();
            StreamWriter sw = new StreamWriter(xmlFile);
            sw.WriteLine("<?xml version=\"1.0\" encoding=\"utf-8\"?>");
            sw.WriteLine(utf.GetString(arr).Trim());
            sw.Close();
        }
        catch (System.Exception ex)
        {
            throw ex;
        }
        finally
        {
            if (writer != null) writer.Close();
        }
    }
}
